/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

/**
 *
 * @author eagle
 */
import dominio.Logro;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class LogroDao {

    private EntityManager em;
    private Logro lg = new Logro();

    public LogroDao(EntityManager em) {
        this.em = em;
    }

    public Logro crearLogro(Integer idAsignatura, int periodoEvaluacion, String descripcion ) {

        lg.setIdasignatura(idAsignatura);
        lg.setDescripcion(descripcion);
        lg.setPeriodoeva(periodoEvaluacion);
        em.persist(lg);
        return lg;
    }

    public Logro intanciarLogro(Object objeto) {
        lg = (Logro) objeto;
        return lg;
    }

    public Logro encontrarLogro(Integer idLogro) {
        return em.find(Logro.class, idLogro);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public Logro encontrarLogro(String descripcion) {
        Query q = em.createQuery("SELECT lg FROM Logro lg WHERE lg.descripcion='" + descripcion + "'");
        if (q.getResultList().isEmpty() == true) {
            return null;
        }
        else {
            lg = (Logro) q.getSingleResult();
            return lg;
        }
    }

    public void borrarLogro(Integer idLogro) {
        lg = encontrarLogro(idLogro);//en este caso podemos borrar un Area por nombre
        if (lg != null) {//si no lo encuentra por supuesto no lo intenta borrar
            em.remove(lg);// borra de la tabla ese registro
            }

    }

    public Logro actualizarLogro(Integer idLogro, String descripcionNueva) {
        Logro lg1; //Aqui se guardaria el posible dato duplicado de la BD, si no encuentra otro registro con nombre nuevo sera null
        lg = encontrarLogro(idLogro); //Uso un metodo de esta misma clase que me retorna un solo dato con una busqueda por nombre
        if (lg != null) {
         /*
            Ahora se verifica que los datos ingresados no existan ya en la BD
        */
            lg1 = encontrarLogro(descripcionNueva);
            if (lg1 == null) {
                lg.setDescripcion(descripcionNueva);
                }
        }
        return lg;
    }

    /*
    public List encontrarAreas() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT ar.nombreArea FROM Area ar");// Ojo la sentencia está en Java Query Language, no SQL
        List<Area> lista = query.getResultList();
        return (lista);
    }

    public List encontrarAreasId() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT ar.idArea FROM Area ar");// Ojo la sentencia está en Java Query Language, no SQL
        List<Area> lista = query.getResultList();
        return (lista);
    }
*/
    public List<Logro> encontrarLogros(Integer idAsignatura, int idPeriodo){
        Query query = em.createQuery("SELECT lg.idlogro, lg.descripcion,lg.periodoeva FROM Logro lg WHERE lg.idasignatura ="+idAsignatura+"AND lg.periodoeva ="+idPeriodo);
        List<Logro> lista = query.getResultList();
        return lista;
    }
}
